昨天介紹了SwiftUI,了解它的特色、基礎架構。
那今天要開始針對SwiftUI的Layout做介紹,看看畫面上的元素是如何排列與對齊的。
SwiftUI 最常見的三種 Stack:
把子元素進行垂直排列。
VStack {
Text("上方文字")
.background(Color.yellow)
Text("下方文字")
.background(Color.red)
}
把子元素進行左右排列。
HStack {
Text("左方文字")
.background(Color.yellow)
Text("右方文字")
.background(Color.red)
}
把子元素堆疊在一起,像 Photoshop 的圖層。
ZStack {
Circle()
.fill(Color.yellow)
Text("Hello, world!")
}
在 Stack 中,Spacer 是一個「彈性空間」,可以把元素推開。
下例會把文字分別靠左、靠右。
HStack {
Text("左方文字")
.background(Color.yellow)
Spacer()
Text("右方文字")
.background(Color.red)
}
而 padding() 則是讓元素周圍多一點空白。
HStack {
Text("左方文字")
.background(Color.yellow)
.padding(50)
Text("右方文字")
.background(Color.red)
}
在 Stack 中,我們可以透過 Alignment 設定元素的對齊方式。
預設是 置中對齊,但可以改成靠左(leading)、靠右(trailing)。
VStack(alignment: .leading) {
Text("上方文字")
.background(Color.yellow)
Text("下方文字123456789")
.background(Color.red)
}
除了上面的leading以外,根據官方範例可以設定以下三種對齊方式
同樣地,HStack 可以設定垂直對齊方式:
HStack(alignment:.bottom ) {
Text("上方文字")
.background(Color.yellow)
Text("下方文字\n123456789")
.background(Color.red)
}
根據官方範例有以下對齊方式
如果想要強制設定元素的大小,可以使用 frame:
VStack {
Text("固定大小")
.frame(width: 200, height: 100)
.background(Color.yellow)
Text("最大寬度")
.frame(maxWidth: .infinity)
.background(Color.red)
}
從 iOS 16 開始,SwiftUI 引入了 Grid,可以更直覺地建立表格或網格排版。
Grid {
GridRow {
Text("A1")
.background(Color.yellow)
Text("B1")
.background(Color.red)
}
GridRow {
Text("A2")
.background(Color.blue)
Text("B2")
.background(Color.green)
}
}
SwiftUI 的 Layout 系統 重點在於: